home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / library / amymetfl.lha / AmigaMetaFileFormat / Examples / amf-anzeiger.e < prev    next >
Text File  |  1996-04-16  |  19KB  |  701 lines

  1. OPT OSVERSION=37
  2. OPT STACK=100000
  3.  
  4. MODULE 'gadtools','libraries/gadtools','intuition/intuition',
  5.        'intuition/screens', 'intuition/gadgetclass', 'graphics/text',
  6.        '*amigametaformat','graphics/view','iffparse','dos/dos',
  7.        'libraries/iffparse','asl','libraries/asl','*amigametaformat.const',
  8.        'tools/constructors','exec/nodes','exec/lists','workbench/startup'
  9.  
  10. ENUM  NOSCREEN,NOWINDOW,NOGADLIB,NOAMFLIB,NOIFFLIB,NOASLLIB,NOMEM,
  11.       INFO,
  12.       LOADERR,SAVEERR,AMFERR,CDRERR
  13.  
  14. DEF window=NIL:PTR TO window,menus=NIL,infos=NIL:PTR TO gadget
  15. DEF scr=NIL:PTR TO screen,visual=NIL,offy,tattr,list:PTR TO lh
  16. DEF filename[256]:STRING
  17.  
  18. /**/PROC openscreen()
  19. DEF result=FALSE
  20. IF gadtoolsbase:=OpenLibrary('gadtools.library',37)
  21.   IF scr:=OpenScreenTagList(NIL,
  22.     [SA_LEFT,0,
  23.      SA_TOP,0,
  24.      SA_WIDTH,-1,
  25.      SA_HEIGHT,-1,
  26.      SA_DEPTH,4,
  27.      SA_TITLE,'Show AmigaMetaFormat-files © Henk Jonas',
  28.      SA_DISPLAYID,$8004,
  29.      SA_PENS,[-1,0],
  30.      NIL])
  31.     LoadRGB4(scr.viewport,[$0888,  $0000,  $0FFF,  $027A,
  32.                            $0F00,  $00F0,  $0FF0,  $000F,
  33.                            $0F0F,  $00FF,  $0700,  $0070,
  34.                            $0770,  $0007,  $0707,  $0077,
  35.                            -1]:INT,16)
  36.     IF visual:=GetVisualInfoA(scr,NIL)
  37.       result:=TRUE
  38.     ELSE
  39.       message(NOSCREEN)
  40.     ENDIF
  41.   ELSE
  42.     message(NOSCREEN)
  43.   ENDIF
  44. ELSE
  45.   message(NOGADLIB)
  46. ENDIF
  47. offy:=scr.wbortop+Int(scr.rastport+58)+1
  48. tattr:=['topaz.font',8,0,0]:textattr
  49. ENDPROC result
  50. /**/
  51.  
  52. /**/PROC closescreen()
  53.   IF visual THEN FreeVisualInfo(visual)
  54.   IF scr THEN CloseScreen(scr)
  55.   IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  56. ENDPROC
  57. /**/
  58.  
  59. /**/PROC openwindow()
  60. DEF result=FALSE
  61. IF menus:=CreateMenusA(
  62.    [NM_TITLE,0,'Project',0,$0,0,0,
  63.     NM_ITEM,0,'Load',0,$0,0,0,
  64.     NM_SUB,0,'AMF',0,$0,0,0,
  65.     NM_SUB,0,'CDR',0,$0,0,0,
  66.     NM_ITEM,0,'Save as',0,$0,0,0,
  67.     NM_SUB,0,'AMF',0,$0,0,0,
  68.     NM_SUB,0,'AMF+PIC',0,$0+NM_ITEMDISABLED,0,0,
  69.     NM_SUB,0,'ILBM',0,$0+NM_ITEMDISABLED,0,0,
  70.     NM_SUB,0,'EPS',0,$0,0,0,
  71.     NM_SUB,0,'GEM',0,$0,0,0,
  72.     NM_SUB,0,'CGM',0,$0,0,0,
  73.     NM_ITEM,0,NM_BARLABEL,0,$0,0,0,
  74.     NM_ITEM,0,'About',0,$0,0,0,
  75.     NM_ITEM,0,'Quit',0,$0,0,0,
  76.     0,0,0,0,0,0,0]:newmenu,NIL)
  77.   IF LayoutMenusA(menus,visual,[GTMN_NEWLOOKMENUS,TRUE,NIL])
  78.     IF window:=OpenWindowTagList(NIL,
  79.        [WA_LEFT,0,
  80.         WA_TOP,offy,
  81.         WA_WIDTH,scr.width,
  82.         WA_HEIGHT,scr.height-offy,
  83.         WA_IDCMP,$76E,
  84.         WA_FLAGS,$100F,
  85.         WA_TITLE,'chose a menuitem',
  86.         WA_CUSTOMSCREEN,scr,
  87.         WA_MINWIDTH,100,
  88.         WA_MINHEIGHT,50,
  89.         WA_MAXWIDTH,-1,
  90.         WA_MAXHEIGHT,-1,
  91.         WA_AUTOADJUST,1,
  92.         WA_NEWLOOKMENUS,TRUE,
  93.         NIL])
  94.       IF SetMenuStrip(window,menus)
  95.         Gt_RefreshWindow(window,NIL)
  96.         result:=TRUE
  97.       ELSE
  98.         message(NOWINDOW)
  99.       ENDIF
  100.     ELSE
  101.       message(NOWINDOW)
  102.     ENDIF
  103.   ELSE
  104.     message(NOWINDOW)
  105.   ENDIF
  106. ELSE
  107.   message(NOWINDOW)
  108. ENDIF
  109. ENDPROC result
  110. /**/
  111.  
  112. /**/PROC closewindow()
  113.   IF window THEN ClearMenuStrip(window)
  114.   IF menus THEN FreeMenus(menus)
  115.   IF window THEN CloseWindow(window)
  116. ENDPROC
  117. /**/
  118.  
  119. /**/PROC wait4message()
  120. DEF mes:PTR TO intuimessage,type
  121. DEF requester:PTR TO requester,loadfile=NIL
  122.   requester:=New(SIZEOF requester)
  123.   REPEAT
  124.     type:=0
  125.     IF mes:=Gt_GetIMsg(window.userport)
  126.       type:=mes.class
  127.       IF type=IDCMP_MENUPICK
  128.         infos:=And(mes.code,$FFFF)
  129.         IF infos=$0
  130.           Request(requester,window)
  131.           IF filereq('load','Please chose AMF-File')
  132.             clearlist()
  133.             IF loadfile:=Open(filename,MODE_OLDFILE)
  134.               parse(loadfile)
  135.               Close(loadfile)
  136.             ELSE
  137.               message(LOADERR)
  138.             ENDIF
  139.           ENDIF
  140.           updatewindow()
  141.           EndRequest(requester,window)
  142.         ELSEIF infos=$800
  143.           Request(requester,window)
  144.           IF filereq('load','Please chose CDR-File')
  145.             clearlist()
  146.             IF loadfile:=Open(filename,MODE_OLDFILE)
  147.               parsecdr(loadfile)
  148.               Close(loadfile)
  149.             ELSE
  150.               message(LOADERR)
  151.             ENDIF
  152.           ENDIF
  153.           updatewindow()
  154.           EndRequest(requester,window)
  155.         ELSEIF infos=$20
  156.           Request(requester,window)
  157.           IF filereq('save','Name of AMF-File')
  158.             saveamf()
  159.           ENDIF
  160.           EndRequest(requester,window)
  161.         ELSEIF infos=$820
  162.           Request(requester,window)
  163.           IF filereq('save','Name of AMF-File')
  164.             saveamf2()
  165.           ENDIF
  166.           EndRequest(requester,window)
  167.         ELSEIF infos=$1020
  168.           Request(requester,window)
  169.           IF filereq('save','Name of ILBM-File')
  170.             saveilbm()
  171.           ENDIF
  172.           EndRequest(requester,window)
  173.         ELSEIF infos=$1820
  174.           Request(requester,window)
  175.           IF filereq('save','Name of EPS-File')
  176.             saveeps()
  177.           ENDIF
  178.           EndRequest(requester,window)
  179.         ELSEIF infos=$2020
  180.           Request(requester,window)
  181.           IF filereq('save','Name of GEM-File')
  182.             savegem()
  183.           ENDIF
  184.           EndRequest(requester,window)
  185.         ELSEIF infos=$2820
  186.           Request(requester,window)
  187.           IF filereq('save','Name of CGM-File')
  188.             savecgm()
  189.           ENDIF
  190.           EndRequest(requester,window)
  191.         ELSEIF infos=$F860
  192.           Request(requester,window)
  193.           message(INFO)
  194.           EndRequest(requester,window)
  195.         ELSEIF infos=$F880
  196.           type:=IDCMP_CLOSEWINDOW
  197.         ELSEIF $F801
  198.           logo()
  199.         ELSE
  200.           WriteF(' \h ',infos)
  201.         ENDIF
  202.       ELSEIF type=IDCMP_REFRESHWINDOW
  203.         Gt_BeginRefresh(window)
  204.         Gt_EndRefresh(window,TRUE)
  205.         updatewindow()
  206.         WHILE mes:=Gt_GetIMsg(window.userport)
  207.           Gt_ReplyIMsg(mes)
  208.         ENDWHILE
  209.         type:=0
  210.       ENDIF
  211.       IF mes THEN Gt_ReplyIMsg(mes)
  212.     ELSE
  213.       WaitPort(window.userport)
  214.     ENDIF
  215.   UNTIL type=IDCMP_CLOSEWINDOW
  216. ENDPROC type
  217. /**/
  218.  
  219. /**/PROC updatewindow()
  220. DEF amf,x,y,xx,yy,func,length,node:PTR TO ln
  221. x:=window.borderleft
  222. y:=window.bordertop
  223. xx:=window.width-window.borderright-window.borderleft
  224. yy:=window.height-window.borderbottom-window.bordertop
  225. IF amf:=AmfOpen(4,[window.rport,x,y,xx,yy,scr::screen.viewport::viewport.colormap])
  226.   node:=list.head
  227.   WHILE node.succ
  228.     func:=Long(node.name)
  229.     length:=Long(node.name+4)
  230.     IF AmfFunction(amf,node.name+8,func,length)<>0 THEN message(AMFERR)
  231.     node:=node.succ
  232.   ENDWHILE
  233.   AmfClose(amf)
  234. ENDIF
  235. ENDPROC
  236. /**/
  237.  
  238. /**/PROC saveamf()
  239. DEF myiff:PTR TO iffhandle,amf,amffile,func,length,node:PTR TO ln
  240. IF amffile:=Open(filename,MODE_NEWFILE)
  241.   IF myiff:=AllocIFF()
  242.     InitIFFasDOS(myiff)
  243.     myiff.stream:=amffile
  244.     OpenIFF(myiff,IFFF_WRITE)
  245.     IF amf:=AmfOpen(3,[myiff,640,480])
  246.       node:=list.head
  247.       WHILE node.succ
  248.         func:=Long(node.name)
  249.         length:=Long(node.name+4)
  250.         AmfFunction(amf,node.name+8,func,length)
  251.         node:=node.succ
  252.       ENDWHILE
  253.       AmfClose(amf)
  254.     ENDIF
  255.     CloseIFF(myiff)
  256.     FreeIFF(myiff)
  257.   ENDIF
  258.   Close(amffile)
  259. ELSE
  260.   message(SAVEERR)
  261. ENDIF
  262. ENDPROC
  263. /**/
  264.  
  265. /**/PROC saveamf2()
  266. DEF amf,x,y,xx,yy,func,length,node:PTR TO ln
  267. x:=window.borderleft
  268. y:=window.bordertop
  269. xx:=window.width-window.borderright-1
  270. yy:=window.height-window.borderbottom-1
  271. IF amf:=AmfOpen(4,[window.rport,x,y,xx,yy,scr::screen.viewport::viewport.colormap])
  272.   node:=list.head
  273.   WHILE node.succ
  274.     func:=Long(node.name)
  275.     length:=Long(node.name+4)
  276.     AmfFunction(amf,node.name+8,func,length)
  277.     node:=node.succ
  278.   ENDWHILE
  279.   AmfClose(amf)
  280. ENDIF
  281. ENDPROC
  282. /**/
  283.  
  284. /**/PROC saveeps()
  285. DEF amf,epsfile,func,length,node:PTR TO ln
  286. IF epsfile:=Open(filename,MODE_NEWFILE)
  287.   IF amf:=AmfOpen(5,[epsfile])
  288.     node:=list.head
  289.     WHILE node.succ
  290.       func:=Long(node.name)
  291.       length:=Long(node.name+4)
  292.       AmfFunction(amf,node.name+8,func,length)
  293.       node:=node.succ
  294.     ENDWHILE
  295.     AmfClose(amf)
  296.   ENDIF
  297.   Close(epsfile)
  298. ELSE
  299.   message(SAVEERR)
  300. ENDIF
  301. ENDPROC
  302. /**/
  303.  
  304. /**/PROC savegem()
  305. DEF amf,gemfile,func,length,node:PTR TO ln
  306. IF gemfile:=Open(filename,MODE_NEWFILE)
  307.   IF amf:=AmfOpen(6,[gemfile])
  308.     node:=list.head
  309.     WHILE node.succ
  310.       func:=Long(node.name)
  311.       length:=Long(node.name+4)
  312.       AmfFunction(amf,node.name+8,func,length)
  313.       node:=node.succ
  314.     ENDWHILE
  315.     AmfClose(amf)
  316.   ENDIF
  317.   Close(gemfile)
  318. ELSE
  319.   message(SAVEERR)
  320. ENDIF
  321. ENDPROC
  322. /**/
  323.  
  324. /**/PROC savecgm()
  325. DEF amf,cgmfile,func,length,node:PTR TO ln
  326. IF cgmfile:=Open(filename,MODE_NEWFILE)
  327.   IF amf:=AmfOpen(7,[cgmfile])
  328.     node:=list.head
  329.     WHILE node.succ
  330.       func:=Long(node.name)
  331.       length:=Long(node.name+4)
  332.       AmfFunction(amf,node.name+8,func,length)
  333.       node:=node.succ
  334.     ENDWHILE
  335.     AmfClose(amf)
  336.   ENDIF
  337.   Close(cgmfile)
  338. ELSE
  339.   message(SAVEERR)
  340. ENDIF
  341. ENDPROC
  342. /**/
  343.  
  344. /**/PROC saveilbm()
  345. DEF amf,x,y,xx,yy,func,length,node:PTR TO ln
  346. x:=window.borderleft
  347. y:=window.bordertop
  348. xx:=window.width-window.borderright-1
  349. yy:=window.height-window.borderbottom-1
  350. IF amf:=AmfOpen(4,[window.rport,x,y,xx,yy,scr::screen.viewport::viewport.colormap])
  351.   node:=list.head
  352.   WHILE node.succ
  353.     func:=Long(node.name)
  354.     length:=Long(node.name+4)
  355.     AmfFunction(amf,node.name+8,func,length)
  356.     node:=node.succ
  357.   ENDWHILE
  358.   AmfClose(amf)
  359. ENDIF
  360. ENDPROC
  361. /**/
  362.  
  363. /**/PROC filereq(grund,was)
  364. DEF req:PTR TO filerequester,ergebnis,flag
  365. ergebnis:=0
  366. IF aslbase:=OpenLibrary('asl.library',37)
  367.   IF req:=AllocAslRequest(ASL_FILEREQUEST,NIL)
  368.     IF (grund='speichern') THEN flag:=$20
  369.     IF AslRequest(req,
  370.       [ASL_WINDOW,window,
  371.        ASL_OKTEXT,grund,
  372.        ASL_HAIL,was,
  373.        NIL])
  374.       StrCopy(filename,req.drawer,ALL)
  375.       AddPart(filename,req.file,255)
  376.       ergebnis:=1
  377.     ENDIF
  378.     FreeAslRequest(req)
  379.   ENDIF
  380.   CloseLibrary(aslbase)
  381. ELSE
  382.   message(NOASLLIB)
  383. ENDIF
  384. ENDPROC(ergebnis)
  385. /**/
  386.  
  387. /**/PROC parse(file)
  388. DEF myiff=0:PTR TO iffhandle,funktion,count,array,anz
  389. IF myiff:=AllocIFF()
  390.   InitIFFasDOS(myiff)
  391.   myiff.stream:=file
  392.   IF 0=OpenIFF(myiff,IFFF_WRITE)
  393.     IF 0=PropChunk(myiff,"AMFF","VERS")
  394.       IF 0=StopChunk(myiff,"AMFF","BODY")
  395.         IF 0=ParseIFF(myiff,IFFPARSE_SCAN)
  396.           REPEAT
  397.             anz:=ReadChunkBytes(myiff,{funktion},4)
  398.             IF anz=4
  399.               anz:=ReadChunkBytes(myiff,{count},4)
  400.               IF anz=4
  401.                 array:=New(count*4)
  402.                 IF array
  403.                   anz:=ReadChunkBytes(myiff,array,count*4)
  404.                   IF anz=(count*4)
  405.                     myamf(array,funktion,count)
  406.                   ELSE
  407.                     anz:=-1
  408.                   ENDIF
  409.                   Dispose(array)
  410.                 ELSE
  411.                   anz:=-1
  412.                 ENDIF
  413.               ELSE
  414.                 anz:=-1
  415.               ENDIF
  416.             ELSE
  417.               anz:=-1
  418.             ENDIF
  419.           UNTIL (anz<0)
  420.         ELSE
  421.           message(AMFERR)
  422.         ENDIF
  423.       ENDIF
  424.     ELSE
  425.       message(AMFERR)
  426.     ENDIF
  427.     CloseIFF(myiff)
  428.   ELSE
  429.     message(AMFERR)
  430.   ENDIF
  431.   FreeIFF(myiff)
  432. ELSE
  433.   message(NOMEM)
  434. ENDIF
  435. ENDPROC
  436. /**/
  437.  
  438. /**/PROC parsecdr(file)
  439. DEF char,a,b,k,lenght,chars[4]:ARRAY OF CHAR,tmpfile
  440. Fread(file,chars,4,1)
  441. IF (chars[0]="R") AND (chars[1]="I") AND (chars[2]="F") AND (chars[3]="F")
  442.   lenght:=FgetC(file)+(256*(FgetC(file)+(256*(FgetC(file)+(256*FgetC(file))))))
  443.   Fread(file,chars,4,1)
  444.   WriteF('RIFF Länge=\d \s\n',lenght,chars)
  445.   IF char<>-1 THEN parsecdr(file)          -> noch nicht am FileEnde
  446. ELSEIF (chars[0]="L") AND (chars[1]="I") AND (chars[2]="S") AND (chars[3]="T")
  447.   lenght:=FgetC(file)+(256*(FgetC(file)+(256*(FgetC(file)+(256*FgetC(file))))))
  448.   Fread(file,chars,4,1)
  449.   WriteF('LIST Länge=\d \s\n',lenght,chars)
  450.   IF char<>-1 THEN parsecdr(file)          -> noch nicht am FileEnde
  451. ELSEIF (chars[0]="v") AND (chars[1]="r") AND (chars[2]="s") AND (chars[3]="n")
  452.   lenght:=FgetC(file)+(256*(FgetC(file)+(256*(FgetC(file)+(256*FgetC(file))))))
  453.   IF lenght=2
  454.     a:=FgetC(file)
  455.     b:=FgetC(file)
  456.     WriteF('Version=\d.\d\n',b,a)
  457.   ELSE
  458.     k:=1
  459.     REPEAT
  460.       char:=FgetC(file)
  461.       k++
  462.     UNTIL (char=-1) OR (k>lenght)
  463.     IF (lenght/2*2)<>lenght THEN FgetC(file) -> beginnt immer an Wortgrenze
  464.   ENDIF
  465.   IF char<>-1 THEN parsecdr(file)          -> noch nicht am FileEnde
  466. ELSEIF (chars[0]="i") AND (chars[1]="d") AND (chars[2]=" ") AND (chars[3]=" ")
  467.   lenght:=FgetC(file)+(256*(FgetC(file)+(256*(FgetC(file)+(256*FgetC(file))))))
  468.   IF lenght=2
  469.     WriteF('Seite=\d\n',FgetC(file)+(256*FgetC(file)))
  470.   ELSE
  471.     k:=1
  472.     REPEAT
  473.       char:=FgetC(file)
  474.       k++
  475.     UNTIL (char=-1) OR (k>lenght)
  476.     IF (lenght/2*2)<>lenght THEN FgetC(file) -> beginnt immer an Wortgrenze
  477.   ENDIF
  478.   IF char<>-1 THEN parsecdr(file)          -> noch nicht am FileEnde
  479. ELSEIF (chars[0]="i") AND (chars[1]="m") AND (chars[2]="h") AND (chars[3]="d")
  480.   lenght:=FgetC(file)+(256*(FgetC(file)+(256*(FgetC(file)+(256*FgetC(file))))))
  481.   WriteF('Preview-File Länge=\d\n',lenght)
  482.   k:=1
  483.   IF tmpfile:=Open('t:preview.bmp',MODE_NEWFILE)
  484.     REPEAT
  485.       char:=FgetC(file)
  486.       FputC(tmpfile,char)
  487.       k++
  488.     UNTIL (char=-1) OR (k>lenght)
  489.     Close(tmpfile)
  490.     Execute('MultiView t:preview.bmp',NIL,NIL)
  491.   ENDIF
  492.   IF (lenght/2*2)<>lenght THEN FgetC(file) -> beginnt immer an Wortgrenze
  493.   IF char<>-1 THEN parsecdr(file)          -> noch nicht am FileEnde
  494. ELSE
  495.   lenght:=FgetC(file)+(256*(FgetC(file)+(256*(FgetC(file)+(256*FgetC(file))))))
  496.   WriteF('\s Länge=\d\n',chars,lenght)
  497.   k:=1
  498.   REPEAT
  499.     char:=FgetC(file)
  500.     k++
  501.   UNTIL (char=-1) OR (k>lenght)
  502.   IF (lenght/2*2)<>lenght THEN FgetC(file) -> beginnt immer an Wortgrenze
  503.   IF char<>-1 THEN parsecdr(file)          -> noch nicht am FileEnde
  504. ENDIF
  505. ENDPROC
  506. /**/
  507.   
  508. /**/PROC logo()
  509. DEF k,j1,j2,j3,j4,j5,j6
  510. ->SETBGPEN
  511. myamf([-1,-1,-1],AMF_SETBGPEN,3)
  512. ->CLEAR_REGION
  513. myamf([0,0,32767,32767],AMF_CLEAR_REGION,4)
  514. FOR k:=0 TO 15
  515.   ->SETFGPEN
  516.   myamf([Shl(16*k,24)+Shl(16*k,16)+Shl(16*k,8)+(k*16),0,0],AMF_SETFGPEN,3)
  517.   ->FILL_POLY
  518.   IF k=0
  519.     myamf([6000,6000,7000,7000,8000,7000,9000,6000,8000,5000,7000,5000],AMF_FILL_POLY,12)
  520.   ELSE
  521.     j1:=9000+(k*1000)
  522.     j2:=8000+(k*1000)
  523.     j3:=9000+(k*1000)
  524.     j4:=10000+(k*1000)
  525.     j5:=9000+(k*1000)
  526.     j6:=8000+(k*1000)
  527.     myamf([j1,6000,j2,7000,j3,7000,j4,6000,j5,5000,j6,5000],AMF_FILL_POLY,12)
  528.   ENDIF
  529.   ->SETFGPEN
  530.   myamf([0,Shl(16*k,24)+Shl(16*k,16)+Shl(16*k,8)+(k*16),0],AMF_SETFGPEN,3)
  531.   ->FILL_POLY
  532.   IF k=0
  533.     myamf([6000,10000,7000,11000,8000,11000,9000,10000,8000,9000,7000,9000],AMF_FILL_POLY,12)
  534.   ELSE
  535.     j1:=9000+(k*1000)
  536.     j2:=8000+(k*1000)
  537.     j3:=9000+(k*1000)
  538.     j4:=10000+(k*1000)
  539.     j5:=9000+(k*1000)
  540.     j6:=8000+(k*1000)
  541.     myamf([j1,10000,j2,11000,j3,11000,j4,10000,j5,9000,j6,9000],AMF_FILL_POLY,12)
  542.   ENDIF
  543.   ->SETFGPEN
  544.   myamf([0,0,Shl(16*k,24)+Shl(16*k,16)+Shl(16*k,8)+(16*k)],AMF_SETFGPEN,3)
  545.   ->FILL_POLY
  546.   IF k=0
  547.     myamf([6000,14000,7000,15000,8000,15000,9000,14000,8000,13000,7000,13000],AMF_FILL_POLY,12)
  548.   ELSE
  549.     j1:=9000+(k*1000)
  550.     j2:=8000+(k*1000)
  551.     j3:=9000+(k*1000)
  552.     j4:=10000+(k*1000)
  553.     j5:=9000+(k*1000)
  554.     j6:=8000+(k*1000)
  555.     myamf([j1,14000,j2,15000,j3,15000,j4,14000,j5,13000,j6,13000],AMF_FILL_POLY,12)
  556.   ENDIF
  557. ENDFOR
  558. ->SETFGPEN
  559. myamf([0,0,0],AMF_SETFGPEN,3)
  560. ->SETMARKSIZE
  561. myamf([1000],AMF_SETMARKSIZE,1)
  562. FOR k:=0 TO 6
  563.   ->SETMARKTYPE
  564.   myamf([k],AMF_SETMARKTYPE,1)
  565.   ->MARK
  566.   myamf([k*2000+10000,20000],AMF_MARK,2)
  567. ENDFOR
  568. FOR k:=0 TO 5
  569.   ->SETLINEPAT
  570.   myamf([k],AMF_SETLINEPAT,1)
  571.   ->LINE
  572.   myamf([k*4000+5000,22000,k*4000+9000,22000],AMF_LINE,4)
  573. ENDFOR
  574. ->SETLINEPAT
  575. myamf([0],AMF_SETLINEPAT,1)
  576. FOR k:=0 TO 6
  577.   ->SETFILLPAT
  578.   myamf([k],AMF_SETFILLPAT,1)
  579.   ->FILL_BOX
  580.   myamf([k*2000+10000,24000,k*2000+11000,25000],AMF_FILL_BOX,4)
  581. ENDFOR
  582. ->SETFILLPAT
  583. myamf([0],AMF_SETFILLPAT,1)
  584. ->SETFGPEN
  585. myamf([-1,0,0],AMF_SETFGPEN,3)
  586. ->FILL_PIE
  587. myamf([7000,31000,3000,3000,45,135],AMF_FILL_PIE,6)
  588. ->SETFGPEN
  589. myamf([0,-1,0],AMF_SETFGPEN,3)
  590. ->FILL_ROUNDED
  591. myamf([10000,28000,13000,31000],AMF_FILL_ROUNDED,4)
  592. ->SETFGPEN
  593. myamf([-1,-1,0],AMF_SETFGPEN,3)
  594. ->POLYGON
  595. myamf([14000,31000,15500,28000,17000,31000,14000,29000,17000,29000,14000,31000],AMF_POLYGON,12)
  596. ->SETFGPEN
  597. myamf([0,0,-1],AMF_SETFGPEN,3)
  598. ->CURVE
  599. myamf([18000,30000,19000,28000,20000,31000,21000,29000],AMF_CURVE,8)
  600. ->SETFGPEN
  601. myamf([-1,0,-1],AMF_SETFGPEN,3)
  602. ->FILL_ELLIPSE
  603. myamf([23000,29500,1000,1500],AMF_FILL_ELLIPSE,4)
  604. ->SETFGPEN
  605. myamf([0,-1,-1],AMF_SETFGPEN,3)
  606. ->ARC
  607. myamf([26500,29500,1500,1500,0,180],AMF_ARC,6)
  608. ENDPROC
  609. /**/
  610.  
  611. /**/PROC myamf(array:PTR TO LONG,funktion,count)
  612. DEF k,feld:PTR TO LONG,node:PTR TO ln
  613.   IF feld:=New(count*4+8)
  614.     feld[0]:=funktion
  615.     feld[1]:=count
  616.     FOR k:=0 TO count-1 DO feld[2+k]:=array[k]
  617.     node:=newnode()
  618.     node.name:=feld
  619.     Enqueue(list,node)
  620.   ENDIF
  621. ENDPROC
  622. /**/
  623.  
  624. /**/PROC clearlist()
  625. DEF newnode,node:PTR TO ln
  626.   node:=list.head
  627.   WHILE node.succ
  628.     newnode:=node.succ
  629.     Remove(node)
  630.     IF node.name THEN Dispose(node.name)
  631.     node:=newnode
  632.   ENDWHILE
  633.   EraseRect(window.rport,window.borderleft,window.bordertop,window.width-window.borderright-1,window.height-window.borderbottom-1)
  634. ENDPROC
  635. /**/
  636.  
  637. /**/PROC message(number)
  638. EasyRequestArgs(window,[SIZEOF easystruct,0,NIL,
  639.    ListItem([
  640.    'Can`t open "Screen"!',
  641.    'Can`t open "Window"!',
  642.    'Where is "gadtools.library 37+"?',
  643.    'Where is "amigametaformat.library 2+"?',
  644.    'Where is "iffparse.library 37+"?',
  645.    'Where is "asl.library 37+"?',
  646.    'Not enough memory!',
  647.    'Show and convert AMF-files in GEM, CGM and EPS-files.\nWritten in E by Henk Jonas.\nBinarys and sources are Public Domain.\n\nThe CDR-part are still in progress.',
  648.    'Can`t found!',
  649.    'Can`t save!',
  650.    'Warning!\nSome Errors in AMF-file.',
  651.    'Warning!\nSome Errors in AMF-file.',
  652.    NIL
  653.    ],number),
  654.    'OK'],NIL,NIL)
  655. ENDPROC
  656. /**/
  657.  
  658. PROC main()
  659. DEF wb:PTR TO wbstartup,args:PTR TO wbarg,wbargs=FALSE,amffile
  660.   IF wb:=wbmessage
  661.     args:=wb.arglist
  662.     IF wb.numargs>1
  663.       args++
  664.       NameFromLock(args.lock,filename,255)
  665.       AddPart(filename,args.name,255)
  666.       wbargs:=TRUE
  667.     ENDIF
  668.   ENDIF
  669.   IF openscreen()
  670.     IF amigametaformatbase:=OpenLibrary('amigametaformat.library',2)
  671.       IF iffparsebase:=OpenLibrary('iffparse.library',37)
  672.         IF list:=newlist()
  673.           IF openwindow()
  674.             IF wbargs
  675.               IF amffile:=Open(filename,MODE_OLDFILE)
  676.                 parse(amffile)
  677.                 Close(amffile)
  678.               ELSE
  679.                 message(LOADERR)
  680.               ENDIF
  681.             ELSE
  682.               logo()
  683.             ENDIF
  684.             updatewindow()
  685.             wait4message()
  686.           ENDIF
  687.         ENDIF
  688.         closewindow()
  689.         CloseLibrary(iffparsebase)
  690.       ELSE
  691.         message(NOIFFLIB)
  692.       ENDIF
  693.       CloseLibrary(amigametaformatbase)
  694.     ELSE
  695.       message(NOAMFLIB)
  696.     ENDIF
  697.   ENDIF
  698.   closescreen()
  699. ENDPROC
  700.  
  701.